﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestorDeFlotasModelo.Factorias;
using GestorDeFlotasModelo.Entities;
using GestorDeFlotasDesktop.UILogic;
using GestorDeFlotasDesktop.UILogic.Helpers;

namespace GestorDeFlotasDesktop.AbmUsuario
{
    public partial class AbmUsuario : BaseForm
    {
        public AbmUsuario()
        {
            InitializeComponent();
        }

        protected override void  OnVisibleChanged(EventArgs e)
        {
            try
            {
                base.OnVisibleChanged(e);
                GridCreation();
                SetGridData(TraerUsuarios());

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private List<Usuario> TraerUsuarios()
        {
            return Transaccion.Factoria<FactoriaUsuario>().SelectTodos<Usuario>();
        }

        #region Grid Configuration
        private void GridCreation()
        {
            gvUsuarios.Columns.Clear();
            gvUsuarios.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            gvUsuarios.AutoGenerateColumns = false;
            gvUsuarios.Columns.Add(DataGridViewHelpers.CreateDataGridViewTextBoxColumn("Id", "Id",false));
            gvUsuarios.Columns.Add(DataGridViewHelpers.CreateDataGridViewTextBoxColumn("Username", "Usuario"));
            gvUsuarios.Columns.Add(DataGridViewHelpers.CreateDataGridViewTextBoxColumn("RolesString", "Roles"));
            gvUsuarios.Columns.Add(DataGridViewHelpers.CreateDataGridViewCheckBoxColumn("Habilitado", "Habilitado"));
        }
        private void SetGridData(List<Usuario> usuarios)
        {
            if (usuarios != null && usuarios.Count > 0)
            {
                //GridCreation();
                gvUsuarios.DataSource = usuarios;
                gvUsuarios.Visible = true;
                lblNoItems.Visible = false;
            }
            else
            {
                lblNoItems.Visible = true;
                gvUsuarios.Visible = false;
            }
        }
        #endregion

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                List<Usuario> usuarios = Transaccion.Factoria<FactoriaUsuario>().SelectPorUserName(txtUserName.Text);
                SetGridData(usuarios);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void AbmUsuario_Load(object sender, EventArgs e)
        {

        }

        private void btnModify_Click(object sender, EventArgs e)
        {
            try
            {
                if (gvUsuarios.SelectedRows.Count > 0)
                {
                    FormUsuario frm = new FormUsuario();
                    Usuario user = (Usuario)gvUsuarios.SelectedRows[0].DataBoundItem;
                    frm.Show();
                    frm.LoadForm(FormMode.Update, user);
                    
                    this.Hide();
                }
                else
                {
                    MessageBox.Show("No has seleccionado ningun usuario para modificar");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            try
            {
                if (gvUsuarios.SelectedRows.Count > 0)
                {
                    Usuario user = (Usuario)gvUsuarios.SelectedRows[0].DataBoundItem;
                    user.Habilitado = false;
                    Transaccion.Persistir();
                    Transaccion.Factoria<FactoriaUsuario>().Suplantar(user);
                    gvUsuarios.DataSource = TraerUsuarios();
                }
                else
                {
                    MessageBox.Show("No has seleccionado ningun usuario para eliminar");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            try
            {
                txtUserName.Text = string.Empty;
                gvUsuarios.DataSource = null;
                gvUsuarios.Rows.Clear();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}